Skip to main content

ES8 ES2017

共享内和原子操作

由全局对象SharedArrayBufferAtomics实现,将数据存储在一块共享内存空间中,这些数据可在JS主线程web-worker线程之间共享

字符串

String.padStart()

把指定字符串填充到字符串头部,返回新字符串

String.padEnd()

把指定字符串填充到字符串尾部,返回新字符串

对象

Object.getOwnPropertyDescriptors()

获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。

返回对象所有自身属性(非继承属性)的描述对象,对应hasOwnproperty(),


Object.values()

返回以值组成的数组

Object.entries():list[key, value]

返回以键和值组成的数组,方便遍历数组(反观py早就可以这样遍历,甚至不用另外调用api,大大提升代码效率)

const capsion = {../}
for (let [key, value] of Obejct.entries(capsion)){
consolve({key, value})
}

SharedArrayBuffer对象

SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,

/**
* @param {*} length 所创建的数组缓冲区的大小,以字节(byte)为单位。
* @returns {SharedArrayBuffer} 一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。
*/

new SharedArrayBuffer(10)

Atomics对象

Atomics 对象提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作。


函数

Async/Await

使异步函数以同步函数的形式书写(Generator函数语法糖),原理是将Generator函数和自动执行器spawn包装在一个函数里。其返回值是一个Promise,支持直接使用.then()添加回调函数

  • 基础使用
async funcrion func() {}
consty func = async function (){}
const func = async () => {}

// 习惯写vue的就很熟悉,OptionsApi就是遵从这个写法
const obj = {
async func(){}
}

// 类中使用
class Person{
async getAge() {}
}

Async函数返回Promise对象,可使用then()添加回调函数

内部return返回值会成为后续then()的出参

内部抛出错误会导致返回的Promise对象变为rejected状态,被catch()接收到

返回的Promise对象必须等到内部所有await命令Promise对象执行完才会发生状态改变,除非遇到return语句抛出错误

任何一个await命令Promise对象变为rejected状态,整个Async函数都会中断执行

希望即使前一个异步操作失败也不要中断后面的异步操作

  • await命令Promise对象放到try-catch
  • await命令Promise对象跟一个catch()

await命令Promise对象可能变为rejected状态,最好把其放到try-catch

多个await命令Promise对象若不存在继发关系,最好让它们同时触发

await命令只能用在Async函数之中,否则会报错

数组使用forEach()执行async/await会失效,可使用for-ofPromise.all()代替

可保留运行堆栈,函数上下文随着Async函数的执行而存在,执行完成就消失

  • 语法参数